<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">

  <title>鼠标移入父div显示子div(且移入子div不隐藏，子div为绝对布局)</title>
  <style>
    .parent {
      position: relative;
      width: 200px;
      height: 200px;
      background-color: lightblue;
      text-align: center;
      line-height: 200px;
    }

    .child {
      position: absolute;
      top: 100%;
      left: 0;
      width: 100%;
      display: none;
      background-color: lightgreen;
      text-align: center;
      padding: 10px;
    }

  </style>

</head>
<body>
<div class="parent">
  Hover over me
  <div class="child">I'm the child</div>
</div>

</body>
<script>
  // 通过类名获取父元素和子元素
  const parent = document.querySelector('.parent');
  const child = document.querySelector('.child');

  // 当鼠标进入父元素时，显示子元素
  parent.addEventListener('mouseenter', () => {
    child.style.display = 'block'; // 设置子元素的显示样式为 'block'
  });

  // 当鼠标离开父元素时，检查鼠标位置是否在父元素区域之外，如果是，则隐藏子元素
  parent.addEventListener('mouseleave', (e) => {
    console.log(e)
    // 获取父元素的边界框信息
    const rect = parent.getBoundingClientRect();
    const mouseX = e.clientX; // 鼠标的水平位置
    const mouseY = e.clientY; // 鼠标的垂直位置

    // 检查鼠标位置是否在父元素的区域之外，如果是，则隐藏子元素
    if (
            mouseX < rect.left || mouseX > rect.right ||
            mouseY < rect.top || mouseY > rect.bottom
    ) {
      child.style.display = 'none'; // 设置子元素的显示样式为 'none'，隐藏子元素
    }
  });


</script>
</html>
